<!DOCTYPE html>
<link rel="help" href="http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent-code" />
<script src="../../resources/js-test.js"></script>-
<textarea id="textarea"></textarea>
<script>
description('Tests KeyboardEvent.code attribute');
var textarea = document.getElementById('textarea');
textarea.addEventListener('keydown', recordKeyEvent, false);
textarea.addEventListener('keyup', recordKeyEvent, false);
textarea.addEventListener('keypress', recordKeyEvent, false);
textarea.focus();

var lastKeyboardDownEvent, lastKeyboardPressEvent, lastKeyboardUpEvent;

function recordKeyEvent(ev) {
    if (window.eventSender) {
        if (ev.type === "keydown")
            lastKeyboardDownEvent = ev;
        else if (ev.type === "keyup")
            lastKeyboardUpEvent = ev;
        else if (ev.type === "keypress")
            lastKeyboardPressEvent = ev;
    } else {
        debug('Type=' + ev.type + ',' + 'code=' + ev.code);
    }
}

if (window.eventSender) {
    debug('AlphaNumeric Keys');
    eventSender.keyDown('A');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'KeyA\'') ;
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'KeyA\'') ;
    shouldEvaluateTo('lastKeyboardPressEvent.code', '\'KeyA\'') ;
    eventSender.keyDown('a'); // Small letters.
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'KeyA\'') ;
    eventSender.keyDown('M');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'KeyM\'') ;
    eventSender.keyDown('m'); // Small letters.
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'KeyM\'');
    eventSender.keyDown('Z');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'KeyZ\'') ;
    eventSender.keyDown('z');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'KeyZ\'');
    eventSender.keyDown('0');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Digit0\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'Digit0\'');
    shouldEvaluateTo('lastKeyboardPressEvent.code', '\'Digit0\'');
    eventSender.keyDown('4');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Digit4\'');
    eventSender.keyDown('9');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Digit9\'');
    eventSender.keyDown('Backspace');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Backspace\'');

    debug('Functional Keys');
    eventSender.keyDown('ControlLeft');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ControlLeft\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'ControlLeft\'');
    eventSender.keyDown('ControlRight');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ControlRight\'');
    eventSender.keyDown('ShiftLeft');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ShiftLeft\'');
    eventSender.keyDown('ShiftRight');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ShiftRight\'');
    eventSender.keyDown('AltLeft');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'AltLeft\'');
    eventSender.keyDown('AltRight');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'AltRight\'');
    eventSender.keyDown('Enter');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Enter\'');
    eventSender.keyDown('ContextMenu');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ContextMenu\'');
    eventSender.keyDown(' ');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Space\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'Space\'');
    shouldEvaluateTo('lastKeyboardPressEvent.code', '\'Space\'');
    eventSender.keyDown('Tab');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Tab\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'Tab\'');

    debug('Control Pad');
    eventSender.keyDown('Insert');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Insert\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'Insert\'');
    eventSender.keyDown('Delete');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Delete\'');
    eventSender.keyDown('Home');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Home\'');
    eventSender.keyDown('End');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'End\'');
    eventSender.keyDown('PageUp');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'PageUp\'');
    eventSender.keyDown('PageDown');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'PageDown\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'PageDown\'');

    debug('Arrow Pad Section');
    eventSender.keyDown('ArrowRight');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ArrowRight\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'ArrowRight\'');
    eventSender.keyDown('ArrowDown');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ArrowDown\'');
    eventSender.keyDown('ArrowLeft');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ArrowLeft\'');
    eventSender.keyDown('ArrowUp');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'ArrowUp\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'ArrowUp\'');

    debug('Number Pad Section');
    eventSender.keyDown('NumLock');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'NumLock\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'NumLock\'');

    debug('Function Section');
    eventSender.keyDown('Escape');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'Escape\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'Escape\'');
    eventSender.keyDown('F1');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'F1\'');
    eventSender.keyDown('F6');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'F6\'');
    eventSender.keyDown('F12');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'F12\'');
    eventSender.keyDown('PrintScreen');
    shouldEvaluateTo('lastKeyboardDownEvent.code', '\'PrintScreen\'');
    shouldEvaluateTo('lastKeyboardUpEvent.code', '\'PrintScreen\'');
}
</script>
